/*************************************************************************************
 *
 *	模块名称 : 词典模块
 *	文件名称 : dict.h
 *	版   本 : V1.0
 *	说   明 : 根据用户输入单词查找词典并打印单词类型和释义。
 *	修改记录 :
 *		     版本号       日期         作者        说明
 *	         V1.0     2022-05-12      YT        发布
 *
 *	Copyright (C), 2022-2030, xxxx
 *
 *************************************************************************************/

#ifndef _DICT_H
#define _DICT_H

#define MAX_WORD_SIZE      50      //宏定义词典中单词最大字节数
#define MAX_TYPE_SIZE      10      //宏定义词典中单词类型最大字节数
#define MAX_EXPLN_SIZE     200     //宏定义词典中单词释义最大字节数
#define MAX_WORD_STR_SIZE (MAX_WORD_SIZE+MAX_TYPE_SIZE+MAX_EXPLN_SIZE)  //宏定义词典中单词每行最大字节数

#define STR_EXIT "_EXIT"           //所约定的退出字符

/************************************************************************** 
 注意：
    字典文件(目前字典文件《dict.txt》有些单词有问题， 会导致这些单词的读取错误甚至引发程序崩溃。

 正确的词典格式
    每行的数据为一个单词，单词的三个字段以若干空格或Tab为分隔符，格式为：
        单词     类型.   释义
        Word    Type.   Expln

    例如：词典第7行内容
        abate            v. make or become less
     
 目前词典数据有两类问题：

    1) 缺少解释字段，会导致程序运行段错误崩溃。
        例如：词典第7658行内容：
        gracefully       adv.
       为规避程序崩溃，在分解词典行数据中加入判断语句（其实应该优化词典质量，而非加判断语句）

    2）缺少类型字段，导致类型显示为错误信息。
        例如：词典第7672行内容：
        graininess       [ grainy: ] resembling, full of, or composed of grain; granular

 因为是词典质量问题导致程序运行结果异常，所以应该优化词典而并不需要改进程序对异常的判断。 

***************************************************************************/

#define DICT_DB_NAME "./dict.db"  //宏定义词典数据库文件名  

typedef struct 
{
    char Word[MAX_WORD_SIZE];        //单词本身
    char Type[MAX_TYPE_SIZE];        //单词类型
    char Expln[MAX_EXPLN_SIZE];      //单词释义
}WordFormatTypedef;  //单词结构体

/**************************************************************************
 * 函数名称: dictOpen
 * 函数说明： 初始化词典模块， 打开词典文件
 * 参   数： 无
 * 返回值  : 0  打开成功
 *          -1 打开失败
 *************************************************************************/
extern int dictOpen();


/**************************************************************************
 * 函数名称: dictClose
 * 函数说明: 关闭闭词典模块， 关闭词典文件
 * 参   数： 无
 * 返回值  : 0  关闭成功
 *          -1 关闭失败 
 *************************************************************************/
extern int dictClose();


/**************************************************************************
 * 函数名称: dictIsExitWord
 * 函数说明：判断字符串是否为约定的退出字段
 * 参   数： strWord 待判断的字符串
 * 返回值  : 0  字符串为约定的退出字段
 *          非0 字符串不是约定的退出字段
 *************************************************************************/
extern int dictIsExitWord( const char strWord[] );


/**************************************************************************
 * 函数名称:  dictFindWord
 * 函数说明： 在字典文件中查找用户输入的单词strUsrWord， 
 *          如果找到就填充pFmtWord所指向的结构体， 否则将结构体设置为0。
 *          此函数需要根据词典文本文件本身的排版特性将词典原文分割为结构化的单词。
 * 参   数： strUsrWord 待查找的单词。
 *          pFmtWord   单词格式化结构体指针，指向所匹配的单词
 * 返回值  : 0 找到
 *          1 未找到
 *************************************************************************/
extern int dictFindWord( const char strUsrWord[], WordFormatTypedef * pFmtWord );


/**************************************************************************
 * 函数名称: dictFindWord
 * 函数说明：在屏幕上输出结构化的单词结构
 * 参   数： pFmtWord 待输出的单词结构指针
 * 返回值  : 0  打印正常单词
 *          -1 所给单词为空单词
 *************************************************************************/
extern int dictPrintWord( const WordFormatTypedef *pFmtWord );


#endif